package com.zbkj.dal.base.enums;

import com.zbkj.dal.base.enums.show.EnumInterface;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Getter
@AllArgsConstructor
public enum OrderStatusEnums implements EnumInterface<Integer> {
    /**
     * 订单状态
     */

    // --------------------- 买入订单的流程状态 ---------------------

    // 待支付
    WAIT_PAY(0, "待支付"),
    // 待发货
    WAIT_SHIPPING(1, "待发货"),
    //     部分发货
//    PART_SHIPPING(2, "部分发货"),
    // 待核销
    AWAIT_VERIFICATION(3, "待核销"),
    // 待收货
    WAIT_RECEIPT(4, "待收货"),
    // 已收货
    TAKE_DELIVERY(5, "已收货"),
    // 已完成
    COMPLETE(6, "已完成"),
    // 已取消
    CANCEL(9, "已取消"),

    // --------------------- 承享订单的流程状态 ---------------------

    // 将后边描述的枚举类型按照上边的格式完善这个枚举类型，枚举类型命名用RENT起头，单词不要太长，可以用常见的缩写： 200:用户待支付 202:商户待发货  204:用户待收货 205:用户待签收  206:用户承享中 208:用户承享待归还 210:待贝贝奢护收货 212:贝贝奢护验收中 214:订单已经完成 251:承享已经超时 253:订单无法回收
    // 200:用户待支付
    RENT_WAIT_PAY(0, "用户待支付"),
    // 202:商户待发货
    RENT_WAIT_SHIPPING(1, "商户待发货"),
    // 204:用户待收货
    RENT_WAIT_RECEIPT(4, "用户待收货"),
    // 205:用户待确认收货
    RENT_AWAIT_DELIVERY(205, "用户已经签收、待确认收货"),
    // 206:用户承享中
    RENT_PROGRESS(206, "用户承享中"),
    // 208:用户承享待归还
    RENT_WAIT_RETURN(208, "用户承享待归还"),
    // 210:待贝贝奢护收货
    RENT_WAIT_RECEIVE(210, "待贝贝奢护收货"),
    // 212:贝贝奢护验收中
    RENT_SCRAPY_VERIFY(212, "贝贝奢护验收中"),
    // 214:订单已经完成
    RENT_COMPLETE(214, "订单已经完成"),
    // 251:承享已经超时
    RENT_OVERDUE(251, "承享已经超时"),
    // 253:订单无法回收
    RENT_UNRECOVERABLE(253, "订单无法回收"),


    ;


    private final Integer code;

    private final String desc;

    @Override
    public Integer code() {
        return code;
    }

    @Override
    public String desc() {
        return desc;
    }


    public static final Boolean canDelivery(Integer status) {
        return Objects.equals(status, WAIT_RECEIPT.code) || Objects.equals(status, RENT_AWAIT_DELIVERY.code);
    }

    public static List<OrderStatusEnums> purchaseStatus() {
        return Arrays.stream(OrderStatusEnums.values()).filter(x-> !x.name().startsWith("RENT")).collect(Collectors.toList());
    }

    public static List<OrderStatusEnums> rentStatus() {
        return Arrays.stream(OrderStatusEnums.values()).filter(x-> x.name().startsWith("RENT")).collect(Collectors.toList());
    }
}
